from dbutils.pooled_db import PooledDB
import pymysql
from pymysql import cursors

# 配置数据库连接池
POOL = PooledDB(
    creator=pymysql,  # 使用链接数据库的模块
    maxconnections=10,  # 连接池允许的最大连接数，0和None表示不限制连接数
    mincached=2,  # 初始化时，链接池中至少创建的空闲的链接，0表示不创建
    maxcached=5,  # 链接池中最多闲置的链接，0和None不限制
    blocking=True,  # 连接池中如果没有可用连接后，是否阻塞等待。True，等待；False，不等待然后报错
    setsession=[],  # 开始会话前执行的命令列表。如：["set datestyle to ...", "set time zone ..."]
    ping=0,
    host='127.0.0.1',
    port=3306,  # 端口号
    user='root',  # 用户名
    passwd='MYSQL_czx081315',  # 密码
    charset="utf8",
    db='day21')  # 数据库内的表格名称


def fetch_one(sql, params):
    # 从连接池获取一个连接
    conn = POOL.connection()
    cursor = conn.cursor(cursor=cursors.DictCursor)
    # cursor = conn.cursor()
    cursor.execute(sql, params)
    result = cursor.fetchone()
    cursor.close()
    conn.close()  # 不是关闭连接，将此连接交还给连接池
    return result


def fetch_all(sql, params):
    # 从连接池获取一个连接
    conn = POOL.connection()
    cursor = conn.cursor(cursor=cursors.DictCursor)
    # cursor = conn.cursor()
    cursor.execute(sql, params)
    result = cursor.fetchall()
    cursor.close()
    conn.close()  # 不是关闭连接，将此连接交还给连接池
    return result


def insert(sql, params):
    # 从连接池获取一个连接
    conn = POOL.connection()
    cursor = conn.cursor(cursor=cursors.DictCursor)
    cursor.execute(sql, params)
    conn.commit()
    cursor.close()
    conn.close()  # 不是关闭连接，将此连接交还给连接池
    return cursor.lastrowid
